#ifndef __UDP_H__
#define __UDP_H__

#ifdef __cplusplus
extern "C" {
#endif

#if _WIN32
#include "win/win.h"
#define sleep(n) Sleep(1000*n)
#endif
#ifdef __unix
#include "unix/unix.h"
#endif
#include "uv_common.h"

    typedef struct _udp {
        SOCKET socket;
        struct sockaddr addr;
        RecvReq_t *recvReq;
        void *data;
    }udp_t;

int udp_init();
int udp_createhandler(udp_t *udphandle, struct sockaddr *addr, size_t addrlen);
void udp_recv_start(udp_t *udphandle, uv_recv_cb cb);
void udp_recv_stop(udp_t *udphandle);

void udp_send(SendReq_t *sendreq, udp_t *handle, const char *buf, size_t len, const struct sockaddr *addr, uv_send_cb cb);
void udp_shutdown(ReqCommon_t *req, udp_t *udphandle,uv_shutdown_cb cb);
int udp_close(udp_t *udphandle);
int udp_getsockname(const udp_t* handle, struct sockaddr* name, int* namelen);


#ifdef __cplusplus
}
#endif
#endif  //__UDP_H__